home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / PowerD / powerd / examples / reaction / fg3.d < prev    next >
Text File  |  2002-10-28  |  7KB  |  217 lines

  1. // Simple example of a fuelgauge button V0.3 © by DMX 2001
  2. OPT OPTIMIZE=3,LINK='amiga.lib'
  3.  
  4. MODULE 'exec','exec/memory','dos/dos','dos/dosextens','exec/lists',
  5.        'exec/nodes','intuition','graphics','intuition/intuition',
  6.        'intuition/gadgetclass','intuition/imageclass',
  7.        'intuition/intuitionbase','intuition/classusr',
  8.        'intuition/gadgetclass','intuition/cghooks','intuition/icclass',
  9.        'intuition/classes','intuition/sghooks','graphics/gfxbase',
  10.        'graphics/text','graphics/gfxmacros','utility/tagitem','utility/hooks'
  11.  
  12. MODULE 'window','classes/window','layout','fuelgauge','label','button',
  13.        'gadgets/layout', 'reaction/reaction', 'reaction/reaction_macros','reaction/reaction_class'
  14.  
  15. DEF LayoutBase:PTR TO ClassLibrary
  16. DEF WindowBase:PTR TO ClassLibrary
  17. DEF FuelGaugeBase:PTR TO ClassLibrary
  18. DEF ButtonBase:PTR TO ClassLibrary
  19. DEF LabelBase:PTR TO ClassLibrary
  20.  
  21. #define FMIN 0
  22. #define FMAX 100
  23.  
  24. ENUM GID_GAUGE=0, GID_DOWN, GID_UP, GID_QUIT, GID_LAST
  25. ENUM WID_MAIN=0, WID_LAST
  26. ENUM OID_MAIN=0, OID_LAST
  27. //ULONG DoMethod( Object *obj, ULONG methodID, ... ); // c style
  28. LPROC DoMethod(obj:PTR TO _Object,methodid:LONG,message=NIL:LIST OF LONG)(ULONG)
  29.  
  30. PROC main()(INT)
  31.  
  32.   DEF AppPort:PTR TO MsgPort
  33.   DEF windows[WID_LAST]:PTR TO Window
  34.   DEF gadgets[GID_LAST]:PTR TO Gadget
  35.   DEF objects[OID_LAST]:PTR TO Object
  36.   DEF i:INT
  37.  
  38.   OpenAll()
  39.   IF (AppPort := CreateMsgPort())
  40. //    PrintF('AppPort = 0x\z\h[8]\n', AppPort) // Debug
  41.     objects[OID_MAIN]:=WindowObject,
  42.       WA_ScreenTitle, 'Reaction Example V0.3 by DMX © 2001',
  43.       WA_Title, 'Reaction FuelGauge Example',
  44.       WA_Activate, TRUE,
  45.       WA_DepthGadget, TRUE,
  46.       WA_DragBar, TRUE,
  47.       WA_CloseGadget, TRUE,
  48.       WA_SizeGadget, TRUE,
  49.       WINDOW_IconifyGadget, TRUE,
  50.       WINDOW_IconTitle, 'FuelGauge',
  51.       WINDOW_AppPort, AppPort,
  52.       WINDOW_Position, WPOS_CENTERSCREEN,
  53.       WINDOW_ParentGroup, VGroupObject,
  54.         LAYOUT_SpaceOuter, TRUE,
  55.         LAYOUT_DeferLayout, TRUE,
  56.  
  57.         LAYOUT_AddChild, gadgets[GID_GAUGE] := FuelGaugeObject,
  58.           GA_ID, GID_GAUGE,
  59.           FUELGAUGE_Orientation, FGORIENT_HORIZ,
  60.           FUELGAUGE_Min, FMIN,
  61.           FUELGAUGE_Max, FMAX,
  62.           FUELGAUGE_Level, 0,
  63.           FUELGAUGE_Percent, TRUE,
  64.           FUELGAUGE_TickSize, 5,
  65.           FUELGAUGE_Ticks, 10,
  66.           FUELGAUGE_ShortTicks, TRUE,
  67.         FuelGaugeEnd,
  68.  
  69.         LAYOUT_AddChild, VGroupObject, 
  70.           LAYOUT_BackFill, NIL,
  71.           LAYOUT_SpaceOuter, TRUE,
  72.           LAYOUT_VertAlignment, LALIGN_CENTER,
  73.           LAYOUT_HorizAlignment, LALIGN_CENTER,
  74.           LAYOUT_BevelStyle, BVS_FIELD,
  75.  
  76.           LAYOUT_AddImage, LabelObject,
  77.             LABEL_Text, 'The fuelgauge supports optional tickmarks as\n',
  78.             LABEL_Text, 'well as vertical and horizontal orientation.\n',
  79.             LABEL_Text, ' \n',
  80.             LABEL_Text, 'You can set the min/max range, as well as\n',
  81.             LABEL_Text, 'options such as varargs ascii display,\n',
  82.             LABEL_Text, 'percentage display, and custom pen selection.\n',
  83.           LabelEnd,
  84.         LayoutEnd,
  85.  
  86.         LAYOUT_AddChild, HGroupObject,
  87.           LAYOUT_SpaceOuter, FALSE,
  88.           LAYOUT_EvenSize, TRUE,
  89.  
  90.           LAYOUT_AddChild, ButtonObject,
  91.             GA_ID, GID_DOWN,
  92.             GA_RelVerify, TRUE,
  93.             GA_Text,'_Down',
  94.           ButtonEnd,
  95.  
  96.           LAYOUT_AddChild, ButtonObject,
  97.             GA_ID, GID_UP,
  98.             GA_RelVerify, TRUE,
  99.             GA_Text,'_Up',
  100.           ButtonEnd,
  101.  
  102.           LAYOUT_AddChild, ButtonObject,
  103.             GA_ID, GID_QUIT,
  104.             GA_RelVerify, TRUE,
  105.             GA_Text,'_Quit',
  106.           ButtonEnd,
  107.       LayoutEnd,
  108.       CHILD_WeightedHeight, 0,
  109.       EndGroup,
  110.     EndWindow
  111.  
  112.     IF (objects[OID_MAIN])
  113.       IF (windows[WID_MAIN]:=RA_OpenWindow(objects[OID_MAIN]))
  114.         DEFUL wait,signal,app=(1 << AppPort.SigBit),done=0,result
  115.         DEFUW code
  116.  
  117.         GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal)
  118.         WHILEN done
  119.           wait := Wait(signal | SIGBREAKF_CTRL_C | app)
  120.           IF (wait & SIGBREAKF_CTRL_C)
  121.             done := TRUE
  122.           ELSE
  123.             WHILEN (result := RA_HandleInput(objects[OID_MAIN], &code)) = WMHI_LASTMSG
  124.               SELECT (result & WMHI_CLASSMASK)
  125.                 CASE WMHI_CLOSEWINDOW
  126.                   windows[WID_MAIN] := NIL
  127.                   done := TRUE
  128.                 CASE WMHI_GADGETUP
  129.                   SELECT (result & WMHI_GADGETMASK)
  130.                     CASE GID_DOWN
  131.                       SetAttrs(objects[OID_MAIN], WA_BusyPointer, TRUE, TAG_END)
  132.                       FOR i := FMAX DTO FMIN STEP -5
  133.                         SetGadgetAttrs(gadgets[GID_GAUGE], windows[WID_MAIN], NIL, FUELGAUGE_Level, i, TAG_DONE)
  134.                         Delay(3)
  135.                       ENDFOR
  136.                       SetAttrs(objects[OID_MAIN], WA_BusyPointer, FALSE, TAG_END)
  137.                     CASE GID_UP
  138.                       SetAttrs(objects[OID_MAIN], WA_BusyPointer, TRUE, TAG_END)
  139.                       FOR i := FMIN TO FMAX STEP 5
  140.                         SetGadgetAttrs(gadgets[GID_GAUGE], windows[WID_MAIN], NIL, FUELGAUGE_Level, i, TAG_DONE)
  141.                         Delay(3)
  142.                       ENDFOR
  143.                       SetAttrs(objects[OID_MAIN], WA_BusyPointer, FALSE, TAG_END)
  144.                     CASE GID_QUIT
  145.                       done := TRUE
  146.                   ENDSELECT
  147.                 CASE WMHI_ICONIFY
  148.                   RA_Iconify(objects[OID_MAIN])
  149.                   windows[WID_MAIN] := NIL
  150.                 CASE WMHI_UNICONIFY
  151.                   windows[WID_MAIN] := RA_OpenWindow(objects[OID_MAIN])
  152.                   IF (windows[WID_MAIN])
  153.                     GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal)
  154.                   ELSE
  155.                     done := TRUE
  156.                   ENDIF
  157.               ENDSELECT
  158.             ENDWHILE
  159.           ENDIF
  160.         ENDWHILE
  161.       ELSE
  162.         PrintF('Can''t RA_OpenWindow()\n') // Debug
  163.       ENDIF
  164.       DisposeObject(objects[OID_MAIN])
  165.     ELSE
  166.       PrintF('Can''t find objects[]\n') // Debug
  167. //      PrintF('Objects[] = 0x\z\h[8]\n', objects) // Debug
  168.     ENDIF
  169.     DeleteMsgPort(AppPort)
  170.   ELSE
  171.     PrintF('Can''t create MsgPort\n') // Debug
  172.   ENDIF
  173.   CloseAll(0)
  174. ENDPROC
  175.  
  176. PROC OpenAll()
  177.   IFN (WindowBase := OpenLibrary('window.class', 44))
  178.     PrintF('Can''t open window.class\n')
  179.     CloseAll(10)
  180.   ENDIF
  181.   IFN (LayoutBase := OpenLibrary('layout.gadget', 44))
  182.     PrintF('Can''t open layout.gadget\n')
  183.     CloseAll(11)
  184.   ENDIF
  185.   IFN (FuelGaugeBase := OpenLibrary('gadgets/fuelgauge.gadget', 44))
  186.     PrintF('Can''t open fuelgauge.gadget\n')
  187.     CloseAll(12)
  188.   ENDIF
  189.   IFN (ButtonBase := OpenLibrary('gadgets/button.gadget', 44))
  190.     PrintF('Can''t open button.gadget\n')
  191.     CloseAll(13)
  192.   ENDIF
  193.   IFN (LabelBase := OpenLibrary('images/label.image', 44))
  194.     PrintF('Can''t open label.image\n')
  195.     CloseAll(14)
  196.   ENDIF
  197. ENDPROC
  198.  
  199. PROC CloseAll(number:INT)
  200.   IF WindowBase
  201.     CloseLibrary(WindowBase)
  202.   ENDIF
  203.   IF LayoutBase
  204.     CloseLibrary(LayoutBase)
  205.   ENDIF
  206.   IF FuelGaugeBase
  207.     CloseLibrary(FuelGaugeBase)
  208.   ENDIF
  209.   IF ButtonBase
  210.     CloseLibrary(ButtonBase)
  211.   ENDIF
  212.   IF LabelBase
  213.     CloseLibrary(LabelBase)
  214.   ENDIF
  215.   Exit(number)
  216. ENDPROC
  217.